Often it is desirable to control a remote computer or computing device via a local computing device (e.g., laptop, desktop computer, mobile phone or device, etc.). For example, an administrator may wish to “take over” or control a worker's computer in order to solve or work on a computing problem experienced by the worker. By remotely controlling the worker's computer, the administrator is no longer required to physically get up and go to the worker's computer. Instead the administrator may control the worker's computer (which is the remote computer from the perspective of the administrator) from the comfort of the administrator's office. Likewise, other remote control situations may be envisioned, for example telecommuting, accessing a home computer while on vacation, etc.
Typically, the software or apparatus that facilitates this remote computing takes the output of the remote computer and displays it at the local computing device. For example, the output of the remote computer may include the video that would normally be displayed to a monitor connected to the remote computer, any audio that would normally be played by any speakers connected to the remote computer, etc. These outputs may be sent to the local computer, where the remote video may be displayed on a local monitor or windows within a graphical user interface (GUI) of the local computing device, and the remote audio may be played by local speakers.
Likewise, local inputs to the local machine may be transmitted to the remote computer. For example, keyboards strokes and mouse actions made by the user at the local machine may be transmitted to the remote machine. The remote machine may then react to those local inputs (e.g., key strokes and mouse actions) as if those inputs had occurred at the remote computer. For example, key presses on the local machine may cause words to be “typed” at the remote machine; mouse movements may cause windows to be moved at the remote machine, etc.
Typically this transportation of inputs (keyboard strokes, mouse actions, etc.) and outputs (e.g., video, audio, etc.) are how the remote computing device is controlled by the local computing device. Often, these inputs and outputs are transported between the local and remote computing devices via the Internet or local networking technology.
In general, remote computing software is typically used to access a remote computer or first computing device from another (local) computer or second computing device. Typically such software uses a custom or proprietary compression format to detect changes on the display screen and send relevant new information from the remote machine to the local machine. This, frequently, requires both a compatible software application (e.g., a client application) on the local machine to decode and display the screen or video data, and a server software application on the remote machine to encode and transmit the screen of video data. Likewise, for other outputs from the remote computer and inputs from the local computing device. These proprietary server/client applications must often be specially installed by a user before a can access a remote computer.
In this context the word “proprietary” refers to a protocol or other component that is owned by a single organization or individual and often protected by various patent's and/or trade secrets, and is contrasted to “non-proprietary”, which refers to a protocol or other component that is promulgated by a individual, organization or standard's body (e.g., World Wide Web Consortium (W3C), etc.) in which the protocol or other component is openly available to essentially anyone for free or a reasonable and non-discriminatory royalty.
Well know instances of remote computing software include Microsoft's Remote Desktop Protocol (RDP) (a.k.a. Terminal Server), Apple's Apple Remote Desktop (ARD), LogMeIn's eponymous LogMeIn software, or the various Virtual Network Computing (VNC) systems, etc. It is noted that RDP, ARD, and LogMein all include or make use of proprietary protocols and components.